// This is the template class for all GameObjects. A GameObject is the most 
// basic unit of the simulation. A single GameObject consists of its SceneNode
// and its Entity mesh representation. GameObjects also store their own 
// positions and orientations locally. GameObjects are extended into various 
// subclasses such as Ships and Turrets. The GameObject provides a framework 
// for all of these components.
// 
// GameObjects only apply to objects that physically exist in the world. For
// example, engines are an object, but they do not have a physical model in 
// the world. Thusly, they exist as logic, but not as a GameObject.

/*****************************************

#include <Ogre.h>

class GameObject
{
	public:

		// Constructor/Destructor.
		GameObject() {};
		~GameObject() {};

		// This one is still up in the air. I'm not sure who should be making
		// these. The GameObject, or the manager.
		virtual GameObject createNewGameObject(Ogre::SceneNode* i_pSceneNode, Ogre::Entity* i_pEntity);

		// Update function that is called by the GameObjectManager every frame.
		virtual void updateGameObject(double timeSinceLastFrame);

		// Set of simple setter/getter functions. Can be overriden for more
		// detailed implementation as needed.

		virtual void addChildGameObject(GameObject* pChildGameObject)
		{
		}

		virtual Ogre::Vector3 getPosition()			
		{ 
			return m_pSceneNode->getPosition(); 
		}

		virtual Ogre::Quaternion getOrientation()
		{
			return m_pSceneNode->getOrientation();
		}
				
		virtual void setPosition(Ogre::Vector3& i_Position)
		{
			m_pSceneNode->setPosition(i_Position);
		}

		virtual void rotateGameObject(Ogre::Quaternion& i_Orientation)
		{
			m_pSceneNode->rotate(i_Orientation);
		}


	private:
		
		Ogre::String			m_sGameObjectName;
		Ogre::SceneNode*		m_pSceneNode;
		Ogre::Entity*			m_pEntity;



};

********************************************/